🔄 III. 알고리즘과 프로그래밍 > 02 알고리즘 표현

알고리즘 표현

문제를 푸는 단계별 방법, 알고리즘!
말(자연어)로, 그림(순서도)으로, 코드 같은 글(의사코드)로 — 같은 알고리즘을 여러 방법으로 표현하고 직접 실행까지 해 봅시다.

자연어
순서도
의사코드

학습 목표

[9정03-02] 문제 해결 절차를 다양한 방법으로 표현한다

  • 알고리즘의 개념과 갖추어야 할 조건을 설명할 수 있다.
  • 같은 알고리즘을 자연어 · 순서도 · 의사코드로 표현할 수 있다.
  • 순서도의 기본 기호를 구분하고, 순서도의 흐름을 따라 결과를 예측할 수 있다.

생각 열기 🤔

엄마가 "라면 끓여 먹어!"라고 하셨는데 끓이는 법을 전혀 모른다면? 누군가 적어 둔 레시피가 있으면 그대로 따라 하면 되죠.

이렇게 "순서대로 따라 하면 문제가 풀리는 단계별 방법"이 바로 알고리즘이에요. 🍜 컴퓨터도 똑같아요 — 정확한 레시피(알고리즘)를 줘야 일을 할 수 있어요.

💡 그런데 레시피를 적는 방법은 한 가지가 아니에요. 오늘은 세 가지 표현 방법을 배웁니다.

1. 알고리즘이란?

What is an Algorithm?

알고리즘(Algorithm)이란 어떤 문제를 해결하기 위한 명확한 단계들의 모음이에요. 누가 따라 해도 같은 결과가 나와야 좋은 알고리즘이랍니다.

파운드케이크 손글씨 레시피 카드 — 재료 목록과 순서대로의 조리 단계

🍰 요리 레시피도 알고리즘이에요

이 카드엔 재료(입력)"순서대로 섞고 → 굽는다"는 단계가 적혀 있어요. 누가 따라 해도 같은 케이크(출력)가 나오죠. 이렇게 명확한 순서가 바로 알고리즘이에요.

© SJGW · CC BY-SA 4.0 · Wikimedia Commons

✨ 좋은 알고리즘이 갖추어야 할 5가지 조건

📥

① 입력

0개 이상의 입력이 주어져요

📤

② 출력

1개 이상의 결과를 내놓아요

📝

③ 명확성

각 단계가 헷갈리지 않게 분명해요

🏁

④ 유한성

언젠가 반드시 끝나요 (무한 반복 ❌)

⑤ 효과성

실제로 실행할 수 있어요

💡 라면 레시피에 "적당히 끓인다"라고만 쓰면? → 명확성이 부족해 사람마다 결과가 달라져요!

2. 자연어로 표현하기

우리가 쓰는 말로 단계 적기

자연어는 우리가 평소 쓰는 한국어·영어 같은 말이에요. 단계를 글로 적기만 하면 되니 가장 쉽지만, "적당히", "조금"처럼 사람마다 다르게 해석될 수 있다는 약점이 있어요.

🍜 예시: 라면 끓이기 알고리즘

  1. 1냄비에 물 550mL를 넣는다.
  2. 2물을 센 불로 끓인다.
  3. 3면과 분말 스프를 넣는다.
  4. 44분 30초 동안 끓인다.
  5. 5그릇에 옮겨 담는다.
  6. 6맛있게 먹는다! 🍜

🔀 인터랙티브 · 알고리즘 순서 맞추기

"아침에 등교 준비하기" 단계가 뒤죽박죽이에요! 아래 카드를 올바른 순서대로 클릭해 보세요.

📦 단계 카드 (클릭해서 아래에 순서대로 놓기)

✅ 내가 만든 순서

3. 순서도로 표현하기

Flowchart — 도형과 화살표로 그리는 흐름

순서도(Flowchart)는 알고리즘을 약속된 도형과 화살표로 그린 그림이에요. 흐름이 한눈에 보이고, 조건에 따라 길이 갈라지는 모습까지 또렷하게 나타낼 수 있어요.

📐 순서도의 기본 기호

시작 / 끝

단말 (타원)

알고리즘의 시작과 끝

처리

처리 (직사각형)

계산·동작 등을 수행

조건?

판단 (마름모)

조건에 따라 길이 나뉨

입력 / 출력

입출력 (평행사변형)

데이터를 받거나 내보냄

▶️ 인터랙티브 · 순서도 실행해 보기

아래 순서도는 "입력한 수가 짝수인지 홀수인지"를 판별해요. 숫자를 넣고 실행하면, 순서도를 한 단계씩 따라가며 어느 길로 가는지 보여줘요!

아니오 시작 숫자 N 입력 N을 2로 나눈나머지 = 0 ? "짝수" 출력 "홀수" 출력
빠른 입력:

실행을 누르면 따라가는 과정이 여기에 단계별로 나타나요.

💡 같은 순서도라도 입력값에 따라 지나가는 길(경로)이 달라져요. 마름모(판단)가 길을 갈라 주는 갈림길 역할을 하죠!

4. 의사코드로 표현하기

Pseudocode — 코드를 흉내 낸 글

의사코드(Pseudocode)프로그래밍 언어처럼 생겼지만, 특정 언어의 까다로운 문법에는 얽매이지 않는 "코드 흉내 글"이에요. 자연어보다 정확하고, 진짜 코드로 옮기기도 쉬워서 프로그래머들이 설계 단계에서 즐겨 써요. ('의사(擬似)'는 '흉내 낸·비슷한'이라는 뜻이에요.)

📝 예시: 두 수 중 큰 수 찾기

입력: 두 수 A, B
만약 A > B 이면
출력 A
아니면
출력 B

↑ 들여쓰기로 "만약~이면" 안쪽에서 무엇을 하는지 한눈에 보여요.

🔑 의사코드의 좋은 점

  • 정확해요. "적당히" 같은 애매한 말 대신, 조건과 동작을 또렷이 적어요.
  • 언어에 자유로워요. 파이썬·스크래치 무엇으로든 쉽게 옮길 수 있어요.
  • 사람이 읽기 쉬워요. 한글로 적어도 되니 설계 회의에서 딱이에요.
💡 의사코드에는 정해진 표준이 없어요. 읽는 사람이 단계를 분명히 이해할 수 있으면 충분해요!

5. 한 알고리즘, 세 가지 표현

같은 내용을 자연어 · 순서도 · 의사코드로

아래는 모두 "두 수 A, B 중 큰 수를 출력하는" 똑같은 알고리즘이에요. 탭을 눌러 세 가지 표현이 어떻게 같고 다른지 비교해 보세요!

  1. 1두 수 A와 B를 입력받는다.
  2. 2A가 B보다 큰지 비교한다.
  3. 3A가 더 크면 A를 출력한다.
  4. 4그렇지 않으면 B를 출력한다.

👍 누구나 쉽게 읽어요.   👎 "큰지"의 기준이 사람 말이라 애매해질 수 있어요.

🗣️

자연어

쉽지만 애매할 수 있음

📊

순서도

흐름이 한눈에, 그리기 번거로움

💻

의사코드

정확, 코드로 옮기기 쉬움

🧩 인터랙티브 · 순서도 기호 짝 맞추기

왼쪽 기호를 누르고, 오른쪽에서 알맞은 역할을 눌러 짝을 맞춰 보세요!

📐 기호

💬 역할

대표 알고리즘 · 정렬과 탐색

Sorting & Searching · 성취기준 밖 심화

컴퓨터가 가장 많이 하는 일이 정렬(순서대로 줄 세우기)과 탐색(찾기)이에요. 같은 일도 알고리즘에 따라 빠르기가 크게 달라요. 직접 움직여 비교해 봐요!

🫧 버블 정렬 애니메이션

옆 칸과 크기를 비교해 큰 값을 뒤로! 가장 큰 값이 거품처럼 끝으로 올라가요.

비교 0회 · 교환 0

막대를 섞은 뒤 '정렬 시작'을 눌러 보세요.

🔍 선형 탐색 vs 이진 탐색

정렬된 숫자에서 찾기! 이진 탐색은 절반씩 줄여 훨씬 빨라요.

찾을 수

선형 탐색 (앞에서부터 하나씩)

이진 탐색 (가운데부터 절반씩)

위 '찾기'를 눌러 비교 횟수를 견줘 보세요.

참고 — 같은 답이라도 '빠르기'가 달라요 (성취기준 밖 심화)

1부터 100까지 모두 더하는 문제를 두 가지 알고리즘으로 풀어 볼까요? 답은 똑같이 5050이지만, 계산 횟수가 크게 달라요.

🐢 하나씩 더하기

1+2+3+…+100. 덧셈을 99번 해야 해요. 더할 수가 1억 개라면? 거의 1억 번!

🚀 공식 쓰기

n×(n+1)÷2 = 100×101÷2. 계산 단 한 번으로 끝! 수가 아무리 커도 똑같이 한 번이에요.

💡 같은 문제도 더 적은 단계로 푸는 것이 좋은 알고리즘이에요. 알고리즘이 입력이 커질 때 얼마나 빨리(혹은 느리게) 도는지 따지는 것을 '효율성·복잡도'라고 해요 — 고등학교·대학에서 더 깊이 배운답니다.

핵심 정리

알고리즘

문제를 푸는 명확한 단계들의 모음. 입력·출력·명확성·유한성·효과성을 갖춰야 해요.

자연어

우리 말로 단계를 적어요. 가장 쉽지만 사람마다 다르게 해석될 수 있어요.

순서도

약속된 도형(타원·직사각형·마름모·평행사변형)과 화살표로 흐름을 그려요. 갈림길은 마름모!

의사코드

코드를 흉내 낸 글. 정확하고 실제 코드로 옮기기 쉬워요.

스스로 점검하기

5문제로 오늘 배운 내용을 확인해요

1

좋은 알고리즘의 조건이 아닌 것은?

2

순서도에서 조건에 따라 흐름이 갈라지는 기호는?

3

"물을 적당히 끓인다"처럼, 사람마다 다르게 해석될 수 있어 부족한 알고리즘 조건은?

4

의사코드에 대한 설명으로 옳은 것은?

5

"짝수/홀수 판별" 순서도에 8을 넣으면 어느 길로 갈까요? (8을 2로 나눈 나머지는 0)